﻿namespace CShorpPro._1016;
//作业7
//用户的登录与注册
public class Program
{
    // 存储用户信息的静态列表
    private static List<User> users = new List<User>();
    
    /// <summary>
    /// 显示主菜单
    /// </summary>
    private static void ShowMainMenu()
    {
        while (true)
        {
            Console.WriteLine("\n=== 用户登录与注册系统 ===");
            Console.WriteLine("1. 登录");
            Console.WriteLine("2. 注册");
            Console.WriteLine("3. 退出");
            Console.Write("请选择功能（1-3）：");
            
            string input = Console.ReadLine();
            
            switch (input)
            {
                case "1":
                    Login();
                    break;
                case "2":
                    Register();
                    break;
                case "3":
                    Console.WriteLine("感谢使用，再见！");
                    return;
                default:
                    Console.WriteLine("请输入有效数字（1-3）");
                    break;
            }
        }
    }
    
    /// <summary>
    /// 用户注册功能
    /// </summary>
    private static void Register()
    {
        Console.WriteLine("\n=== 用户注册 ===");
        
        // 输入用户名
        string username;
        while (true)
        {
            Console.Write("请输入用户名（3-15个字符，只能包含字母、数字、下划线）：");
            username = Console.ReadLine();
            
            if (string.IsNullOrWhiteSpace(username))
            {
                Console.WriteLine("用户名不可为空");
                continue;
            }
            
            if (!ValidateUsername(username))
            {
                Console.WriteLine("用户名格式不正确");
                continue;
            }
            
            if (users.Any(u => u.Username == username))
            {
                Console.WriteLine("用户名已存在，请重新输入");
                continue;
            }
            
            break;
        }
        
        // 输入密码
        string password;
        while (true)
        {
            Console.Write("请输入密码（6-20个字符，必须包含大写字母、小写字母和数字）：");
            password = Console.ReadLine();
            
            if (string.IsNullOrWhiteSpace(password))
            {
                Console.WriteLine("密码不可为空");
                continue;
            }
            
            if (!ValidatePassword(password))
            {
                Console.WriteLine("密码格式不正确");
                continue;
            }
            
            break;
        }
        
        // 确认密码
        while (true)
        {
            Console.Write("请再次输入密码：");
            string confirmPassword = Console.ReadLine();
            
            if (string.IsNullOrWhiteSpace(confirmPassword))
            {
                Console.WriteLine("确认密码不可为空");
                continue;
            }
            
            if (password != confirmPassword)
            {
                Console.WriteLine("两次输入的密码不一致，请重新输入");
                continue;
            }
            
            break;
        }
        
        // 创建用户并添加到用户列表
        User newUser = new User
        {
            Username = username,
            Password = password
        };
        
        users.Add(newUser);
        Console.WriteLine("注册成功！您可以返回主菜单进行登录。");
    }
    
    /// <summary>
    /// 用户登录功能
    /// </summary>
    private static void Login()
    {
        Console.WriteLine("\n=== 用户登录 ===");
        
        // 输入用户名
        Console.Write("请输入用户名：");
        string username = Console.ReadLine();
        
        if (string.IsNullOrWhiteSpace(username))
        {
            Console.WriteLine("用户名不可为空");
            return;
        }
        
        // 查找用户
        User user = users.FirstOrDefault(u => u.Username == username);
        if (user == null)
        {
            Console.WriteLine("用户名不存在");
            return;
        }
        
        // 输入密码
        Console.Write("请输入密码：");
        string password = Console.ReadLine();
        
        if (string.IsNullOrWhiteSpace(password))
        {
            Console.WriteLine("密码不可为空");
            return;
        }
        
        // 验证密码
        if (user.Password != password)
        {
            Console.WriteLine("密码错误");
            return;
        }
        
        Console.WriteLine($"欢迎，{username}！登录成功。");
        ShowSystemHomepage();
    }
    
    /// <summary>
    /// 显示系统首页（模拟）
    /// </summary>
    private static void ShowSystemHomepage()
    {
        Console.WriteLine("\n=== 系统首页 ===");
        Console.WriteLine("这里是系统主页，您可以进行各种操作...");
        Console.WriteLine("按任意键返回主菜单...");
        Console.ReadKey();
    }
    
    /// <summary>
    /// 验证用户名格式
    /// </summary>
    /// <param name="username">用户名</param>
    /// <returns>验证结果</returns>
    private static bool ValidateUsername(string username)
    {
        // 长度检查
        if (username.Length < 3 || username.Length > 15)
            return false;
        
        // 字符检查：只能包含字母、数字、下划线
        foreach (char c in username)
        {
            if (!char.IsLetterOrDigit(c) && c != '_')
                return false;
        }
        
        return true;
    }
    
    /// <summary>
    /// 验证密码格式
    /// </summary>
    /// <param name="password">密码</param>
    /// <returns>验证结果</returns>
    private static bool ValidatePassword(string password)
    {
        // 长度检查
        if (password.Length < 6 || password.Length > 20)
            return false;
        
        bool hasUpper = false;
        bool hasLower = false;
        bool hasDigit = false;
        
        // 检查是否包含大写字母、小写字母和数字
        foreach (char c in password)
        {
            if (char.IsUpper(c))
                hasUpper = true;
            else if (char.IsLower(c))
                hasLower = true;
            else if (char.IsDigit(c))
                hasDigit = true;
        }
        
        return hasUpper && hasLower && hasDigit;
    }
}

/// <summary>
/// 用户信息类
/// </summary>
public class User
{
    public string Username { get; set; }
    public string Password { get; set; }
}
    